package com.eliza.net.activity

import android.os.Bundle
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import com.alibaba.fastjson.JSON
import com.eliza.library.model.Stu
import com.eliza.library.tools.InfoTools
import com.eliza.net.R
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import org.json.JSONArray
import org.json.JSONObject
import java.io.BufferedReader
import java.io.InputStreamReader
import java.lang.reflect.Type


class AssetsActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_assets)

        findViewById<Button>(R.id.asset_read_btn).setOnClickListener {
            parseJson()
        }
    }

    /**
     * 读取 assets 文件夹下的 json吗，并解析json
     */
    fun parseJson() {
        //获得assets资源管理器（assets中的文件无法直接访问，可以使用AssetManager访问）
//      使用IO流读取json文件内容==>AssetManager访问
        val isr = InputStreamReader(assets.open("Stu.json"))
        val br = BufferedReader(isr)//  使用字符高效流
        var line: String?
        val builder = StringBuilder()
        while (br.readLine().also { line = it } != null) {
            builder.append(line)
        }
        br.close();
        isr.close();


        val userList = arrayListOf<Stu>()
        val jsonArray = JSONArray(builder.toString())

        for (i in 0 until jsonArray.length()) {
            val jsonObject = jsonArray.get(i) as JSONObject
            InfoTools.LogTools(this, jsonObject)
            InfoTools.LogTools(this, jsonObject.getString("name"), 2)

//            添加到数组中
            userList.add(
                Stu(
                    jsonObject.getInt("id"),
                    jsonObject.getString("name"),
                    jsonObject.getInt("age")
                )
            )
        }
        /**
         *         使用google的Gson进行解析==>解析出来为 null 离谱
         */
        // 使用google的Gson进行解析

        InfoTools.ToastTools(this, "$builder")
        val type: Type = object : TypeToken<ArrayList<Stu>>() {}.type

        val fromJson: ArrayList<Stu> =
            Gson().fromJson<ArrayList<Stu>>(builder.toString(), type)
        InfoTools.ToastTools(this, "gson::${fromJson.toString()}")


        /**
         * alibaba FastJson
         * */

        val parseArray = JSON.parseArray(builder.toString(), Stu::class.java)
        parseArray.forEach { v ->
            InfoTools.ToastTools(this, "fastJson::${v.toString()}")

        }
    }
}
